package com.easytool.config;

import com.easytool.routes.AdminRoutes;
import com.easytool.routes.FrontRoutes;
import com.jfinal.config.*;
import com.jfinal.core.JFinal;
import com.jfinal.ext.handler.ContextPathHandler;
import com.jfinal.ext.interceptor.SessionInViewInterceptor;
import com.jfinal.json.FastJsonFactory;
import com.jfinal.kit.Prop;
import com.jfinal.kit.PropKit;
import com.jfinal.server.undertow.UndertowServer;
import com.jfinal.template.Engine;

/**
 * 启动配置类
 *
 * @author liupengtao
 * @date 2019/12/18
 */
public class AppConfig extends JFinalConfig {

    /**
     *运行main方法启动项目
     */
    public static void main(String[] args) {
        UndertowServer.start(AppConfig.class);
    }


    private static Prop p;

    /**
     * 加载系统配置
     */
    static void loadConfig() {
        if (p == null) {
            p = PropKit.use("config-dev.txt").appendIfExists("config-pro.txt");
        }
    }

    @Override
    public void configConstant(Constants me) {
        // 读取配置文件
        loadConfig();
        // 设置当前是否为开发模式
        me.setDevMode(p.getBoolean("devMode"));
        // 设置默认上传文件保存路径 getFile等使用
        me.setBaseUploadPath(p.get("baseUploadPath"));
        // 设置默认下载文件路径 renderFile使用
        me.setBaseDownloadPath(p.get("baseDownloadPath"));
        // 设置error渲染视图
        me.setError403View(WebContant.error403View);
        me.setError404View(WebContant.error404View);
        me.setError500View(WebContant.error500View);
        //Json配置
        me.setJsonFactory(FastJsonFactory.me());
        //开启依赖注入
        me.setInjectDependency(true);
        //附件上传大小设置100M
        me.setMaxPostSize(WebContant.maxPostSize);
    }

    @Override
    public void configRoute(Routes routes) {
        routes.add(new AdminRoutes());
        routes.add(new FrontRoutes());
    }

    @Override
    public void configEngine(Engine me) {
        // 这里只有选择JFinal TPL的时候才用
        me.setDevMode(p.getBoolean("engineDevMode"));
        // 项目根路径
        me.addSharedObject("path", JFinal.me().getContextPath());
        // 项目名称
        me.addSharedObject("projectName", p.get("projectName"));
        // 项目版权
        me.addSharedObject("copyright", p.get("copyright"));
        // 配置共享函数模板
        //me.addSharedFunction(WebContant.functionTemp);
    }

    @Override
    public void configPlugin(Plugins plugins) {

    }

    @Override
    public void configInterceptor(Interceptors me) {
        me.addGlobalActionInterceptor(new SessionInViewInterceptor());
    }

    @Override
    public void configHandler(Handlers me) {
        me.add(new ContextPathHandler("ctx"));
    }
}
